const { findUserByAccount, findUserById, findUsers, insertUser } = require('../models/user.js')
const { createToken, verifyToken, getUser } = require('../utils')
const { ADMIN, roles } = require('./config.js')

exports.doLogin = async (ctx, next) => {
  // Controler
  // 获取用户传递的参数
  const { account, password } = ctx.request.body
  // 业务判断
  if (!account || !password) {
    return ctx.fail('必须传用户名和密码！');
  }
  // 查询用户信息   Model
  const res = await findUserByAccount(account)
  if (res.length === 0) {
    return ctx.fail('用户名或密码错误！')
  }

  const user = res[0]
  if (user.password != password) {
    return ctx.fail('用户名或密码错误！')
  }

  // 要把数据库返回的对象处理成普通对象
  const saveUser = {
    id: user.id,
    account: user.account,
    // 未来处理权限
    type: user['role_id']
  }

  // V view视图 // 返回token
  const token = createToken(saveUser)
  ctx.success({ token })
}

exports.getInfo = async ctx => {
  const user = ctx.state.user;
  if (!user) {
    return ctx.fail('用户信息获取失败!')
  }
  console.log('user', user);
  const { id } = user;
  const res = await findUserById(id)
  if (!res.length) return ctx.fail('用户信息不存在或已删除！')
  const dbres = res[0]
  ctx.success({
    info: '获取信息成功！',
    roles: [{ name: dbres['role_name'] }]
  })
}

exports.logout = async ctx => {
  // 如果是session机制
  // ctx.session.user = null  // session退出
  global.blackTokenList.push(ctx.headers.token)
  // 要return给前端，不然会报404
  return ctx.tokenExpires('退出成功')
}

exports.queryList = async ctx => {
  const res = await findUsers();
  return ctx.success(res)
}

exports.createUser = async ctx => {
  // 创建人只能是administrator  role_id === 3
  // 登录成功生成token的时候保存
  const { type } = ctx.state.user
  if (type != ADMIN) {
    return ctx.fail('无权限创建用户')
  }
  const { account, password, role_id } = ctx.request.body;
  let role_name = roles[role_id]
  const insertRes = await insertUser([account, password, role_id, role_name])
  if (insertRes.affectedRows !== 1) {
    return ctx.fail('新增用户失败！')
  }
  ctx.success('新增用户成功')
}